package tests;

import static org.junit.Assert.*;

import org.junit.Test;

import excepciones.ExcepcionCantidadDeTarjetasAmarillasIncorrecta;
import excepciones.ExcepcionNumeroDeFechaImposible;

import programa.Delantero;
import programa.Jugador;
import programa.Volante;

public class TestsJugador {

	@Test
	public void testElNombreYvalorDelJugadorDeberianAsignarseCorrectamenteAlCrearlo(){
		
		String unNombre = "Juan Roman Riquelme";
		
		Jugador unJugador = new Volante(unNombre, 5000000);
		
		assertTrue(unJugador.obtenerNombre() == unNombre);
		
		assertTrue(unJugador.obtenerValorDeMercado() == 5000000);
		
	}
	
	//****************************************************************************
	
	@Test
	public void testOtroNombreYotroValorDelJugadorDeberianAsignarseCorrectamente(){
		
		String unNombre = "Emanuel Gigliotti";
		
		Jugador unJugador = new Delantero(unNombre, 1000000);
		
		assertTrue(unJugador.obtenerNombre() == unNombre);
		
		assertTrue(unJugador.obtenerValorDeMercado() == 1000000);
		
	}
	
	//****************************************************************************
	
	@Test
	public void testLosPuntajesDeLasFechasDeberianEstarVaciosAlCrearElJugador() throws ExcepcionNumeroDeFechaImposible{
		
		String unNombre = "Jonhatan Calleri";
		
		Jugador unJugador = new Delantero(unNombre, 7000000);
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unJugador.obtenerPuntajeTotalDeLaFecha(i) == 0);
			
		}
		
	}
	
	//****************************************************************************
	
	@Test
	public void testLaCantidadDeGolesAfavorDeJugadaDeLasFechasDeberianEstarVaciosAlCrearElJugador() throws ExcepcionNumeroDeFechaImposible{
		
		String unNombre = "Jonhatan Calleri";
		
		Jugador unJugador = new Delantero(unNombre, 7000000);
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unJugador.obtenerCantidadDeGolesDeJugadaAfavorDeLaFecha(i) == 0);
			
		}
		
	}
	
	//****************************************************************************
	
	@Test
	public void testLaCantidadDeGolesDePenalDeLasFechasDeberianEstarVaciosAlCrearElJugador() throws ExcepcionNumeroDeFechaImposible{

		String unNombre = "Jonhatan Calleri";
			
		Jugador unJugador = new Delantero(unNombre, 7000000);
			
		for(int i = 1; i < 20; i++){
				
			assertTrue(unJugador.obtenerCantidadDeGolesDePenalDeLaFecha(i) == 0);
				
		}
			
	}
	
	//****************************************************************************
	
	@Test
	public void testLaCantidadDePenalesErradosDeLasFechasDeberianEstarVaciosAlCrearElJugador() throws ExcepcionNumeroDeFechaImposible{
			
		String unNombre = "Jonhatan Calleri";
			
		Jugador unJugador = new Delantero(unNombre, 7000000);
			
		for(int i = 1; i < 20; i++){
				
			assertTrue(unJugador.obtenerCantidadDePenalesErradosDeLaFecha(i) == 0);
				
		}
			
	}
	
	//****************************************************************************
	
	@Test
	public void testLaCantidadDeGolesEnContraDeLasFechasDeberianEstarVaciosAlCrearElJugador() throws ExcepcionNumeroDeFechaImposible{

		String unNombre = "Jonhatan Calleri";
			
		Jugador unJugador = new Delantero(unNombre, 7000000);
			
		for(int i = 1; i < 20; i++){
				
			assertTrue(unJugador.obtenerCantidadDeGolesEnContraDeLaFecha(i) == 0);
				
		}
			
	}
	
	//****************************************************************************

	@Test
	public void testElJugadorNoDeberiaTenerTarjetasAmarillasEnNingunaFechaAlCrearlo() throws ExcepcionNumeroDeFechaImposible{
		
		String unNombre = "Jonhatan Calleri";
		
		Jugador unJugador = new Delantero(unNombre, 7000000);
			
		for(int i = 1; i < 20; i++){
				
			assertTrue(unJugador.obtenerCantidadDeTarjetasAmarillasDeLaFecha(i) == 0);
				
		}
		
	}
	
	//***************************************************************************
	
	@Test
	public void testElJugadorNoDeberiaEstarExpulsadoEnNingunaFechaAlCrearlo() throws ExcepcionNumeroDeFechaImposible{
		
		String unNombre = "Jonhatan Calleri";
		
		Jugador unJugador = new Delantero(unNombre, 7000000);
			
		for(int i = 1; i < 20; i++){
				
			assertFalse(unJugador.fueExpulsadoEnLaFecha(i));
				
		}
		
	}
	
	//************************************************************************
	
	@Test
	public void testElJugadorNoDeberiaHaberSidoFiguraEnNingunaFechaAlCrearlo() throws ExcepcionNumeroDeFechaImposible{
			
		String unNombre = "Jonhatan Calleri";
			
		Jugador unJugador = new Delantero(unNombre, 7000000);
			
		for(int i = 1; i < 20; i++){
				
			assertFalse(unJugador.fueFiguraEnLaFecha(i));
				
		}
			
	}
	
	//****************************************************************************
	
	@Test
	public void testElJugadorNoDeberiaHaberSidoChenemigoEnNingunaFechaAlCrearlo() throws ExcepcionNumeroDeFechaImposible{

		String unNombre = "Jonhatan Calleri";
			
		Jugador unJugador = new Delantero(unNombre, 7000000);
			
		for(int i = 1; i < 20; i++){
				
			assertFalse(unJugador.fueChenemigoEnLaFecha(i));
				
		}
			
	}
	
	//****************************************************************************

	@Test
	public void testElPuntajeDelPartidoDeberiaAsignarseCorrectamenteParaTodasLasFechas() throws ExcepcionNumeroDeFechaImposible{

		String unNombre = "Jonhatan Calleri";
		
		int unPuntaje;
			
		Jugador unJugador = new Delantero(unNombre, 7000000);
		
		for(int i = 1; i < 20; i++){
			
			unPuntaje = (int) Math.floor(Math.random() * 10 + 1);
			
			unJugador.recibioPuntajeEnLaFecha(unPuntaje, i);
			
			assertTrue(unJugador.obtenerPuntajeDelPartidoDeLaFecha(i) == unPuntaje);
			
		}
		
	}
	
	//****************************************************************************
	
	@Test
	public void testLaCantidadDeGolesDeJugadaAfavorDeberiaAsignarseCorrectamenteParaTodasLasFechas() throws ExcepcionNumeroDeFechaImposible{
		
		String unNombre = "Jonhatan Calleri";
		
		int unaCantidadDeGoles;
			
		Jugador unJugador = new Delantero(unNombre, 7000000);
		
		for(int i = 1; i < 20; i++){
			
			unaCantidadDeGoles = (int) Math.floor(Math.random() * 10 + 1);
			
			unJugador.hizoCantidadDeGolesDeJugadaAfavorEnLaFecha(unaCantidadDeGoles, i);
			
			assertTrue(unJugador.obtenerCantidadDeGolesDeJugadaAfavorDeLaFecha(i) == unaCantidadDeGoles);
			
		}
		
	}
	
	//****************************************************************************
	
	@Test
	public void testLaCantidadDeGolesDePealDeberiaAsignarseCorrectamenteParaTodasLasFechas() throws ExcepcionNumeroDeFechaImposible{
		
		String unNombre = "Jonhatan Calleri";
		
		int unaCantidadDePenales;
			
		Jugador unJugador = new Delantero(unNombre, 7000000);
		
		for(int i = 1; i < 20; i++){
			
			unaCantidadDePenales = (int) Math.floor(Math.random() * 10 + 1);
			
			unJugador.hizoCantidadDeGolesDePenalEnLaFecha(unaCantidadDePenales, i);
			
			assertTrue(unJugador.obtenerCantidadDeGolesDePenalDeLaFecha(i) == unaCantidadDePenales);
			
		}
		
	}
	
	//****************************************************************************
	
	@Test
	public void testLaCantidadDePenalesErradosDeberiaAsignarseCorrectamenteParaTodasLasFechas() throws ExcepcionNumeroDeFechaImposible{

		String unNombre = "Jonhatan Calleri";
		
		int unaCantidadDePenales;
			
		Jugador unJugador = new Delantero(unNombre, 7000000);
		
		for(int i = 1; i < 20; i++){
			
			unaCantidadDePenales = (int) Math.floor(Math.random() * 10 + 1);
			
			unJugador.erroCantidadDePenalesEnLaFecha(unaCantidadDePenales, i);
			
			assertTrue(unJugador.obtenerCantidadDePenalesErradosDeLaFecha(i) == unaCantidadDePenales);
			
		}
		
	}
	
	//****************************************************************************
	
	@Test
	public void testLaCantidadDeGolesEnContraDeberiaAsignarseCorrectamenteParaTodasLasFechas() throws ExcepcionNumeroDeFechaImposible{
		
		String unNombre = "Jonhatan Calleri";
		
		int unaCantidadDeGoles;
			
		Jugador unJugador = new Delantero(unNombre, 7000000);
		
		for(int i = 1; i < 20; i++){
			
			unaCantidadDeGoles = (int) Math.floor(Math.random() * 10 + 1);
			
			unJugador.hizoCantidadDeGolesEnContraEnLaFecha(unaCantidadDeGoles, i);
			
			assertTrue(unJugador.obtenerCantidadDeGolesEnContraDeLaFecha(i) == unaCantidadDeGoles);
			
		}
		
	}
	
	//****************************************************************************
	
	@Test
	public void testLaCantidadDeTarjetasAmarillasEnUnaFechaDeberiaAsignarseCorrectamente() throws ExcepcionNumeroDeFechaImposible{
		
		String unNombre = "Jonhatan Calleri";
		
		int unaCantidadDeTarjetasAmarillas;
			
		Jugador unJugador = new Delantero(unNombre, 7000000);
		
		for(int i = 1; i < 20; i++){
			
			unaCantidadDeTarjetasAmarillas = (int) Math.floor(Math.random() * 2 + 1);
			
			try{
				
				unJugador.obtuvoCantidadDeTarjetasAmarillasEnLaFecha(unaCantidadDeTarjetasAmarillas, i);
				
				assertTrue(unJugador.obtenerCantidadDeTarjetasAmarillasDeLaFecha(i) == unaCantidadDeTarjetasAmarillas);
				
			}catch(ExcepcionCantidadDeTarjetasAmarillasIncorrecta miExcepcion){
				
				fail();
				
			}
				
		}
		
	}
	
	//***************************************************************************
	
	@Test
	public void testSiLaCantidadDeTarjetasAmarillasDeUnaFechaEsIncorrectaDeberiaLanzarUnaExcepcion() throws ExcepcionNumeroDeFechaImposible{
		
		String unNombre = "Jonhatan Calleri";
		
		int unaCantidadDeTarjetasAmarillas;
		
		Jugador unJugador = new Delantero(unNombre, 7000000);
		
		for(int i = 1; i < 20; i++){
			
			unaCantidadDeTarjetasAmarillas = ((int) Math.floor(Math.random() * 3 + 1) + 3);
			
			try{
				
				unJugador.obtuvoCantidadDeTarjetasAmarillasEnLaFecha(unaCantidadDeTarjetasAmarillas, i);
				
				fail();
				
			}catch(ExcepcionCantidadDeTarjetasAmarillasIncorrecta miExcepcion){
				
				assertTrue(true);
				
			}
				
		}
		
	}
	
	//****************************************************************************
	
	@Test
	public void testSiElJugadorSaleExpulsadoEnUnaFechaDeberiaAsignarseCorrectamente() throws ExcepcionNumeroDeFechaImposible{
		
		String unNombre = "Jonhatan Calleri";
		
		Jugador unJugador = new Delantero(unNombre, 7000000);
		
		for(int i = 1; i < 20; i++){
			
			unJugador.salioExpulsadoEnLaFecha(i);
			
			assertTrue(unJugador.fueExpulsadoEnLaFecha(i));
			
		}
		
	}
	
	//****************************************************************************

	@Test
	public void testSiElJugadorSaleFiguraEnUnaFechaDeberiaAsignarseCorrectamente() throws ExcepcionNumeroDeFechaImposible{

		String unNombre = "Jonhatan Calleri";
			
		Jugador unJugador = new Delantero(unNombre, 7000000);
		
		for(int i = 1; i < 20; i++){
			
			unJugador.salioFiguraEnLaFecha(i);
			
			assertTrue(unJugador.fueFiguraEnLaFecha(i));
			
		}
		
	}
	
	//****************************************************************************
	
	@Test
	public void testSiElJugadorSaleChenemigoEnUnaFechaDeberiaAsignarseCorrectamente() throws ExcepcionNumeroDeFechaImposible{

		String unNombre = "Jonhatan Calleri";
			
		Jugador unJugador = new Delantero(unNombre, 7000000);
		
		for(int i = 1; i < 20; i++){
			
			unJugador.salioChenemigoEnLaFecha(i);
			
			assertTrue(unJugador.fueChenemigoEnLaFecha(i));
			
		}
		
	}
	
	//****************************************************************************

	@Test
	public void testSiUnDelanteroHaceUnGolEnContraDeberiaRestar3PuntosExtra() throws ExcepcionNumeroDeFechaImposible{
		
		Delantero unDelantero = new Delantero("Claudio Riaño", 5000000);
		
		for(int i = 1; i < 20; i++){
			
			unDelantero.hizoCantidadDeGolesEnContraEnLaFecha(1, i);
			
		}
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unDelantero.obtenerPuntajeTotalDeLaFecha(i) == -3);
			
		}
		
	}
	
	//*************************************************************************
	
	@Test
	public void testSiUnVolanteHaceUnGolEnContraDeberiaRestar3PuntosExtra() throws ExcepcionNumeroDeFechaImposible{
		
		Volante unVolante = new Volante("Maxi Rodriguez", 1000000);
		
		for(int i = 1; i < 20; i++){
			
			unVolante.hizoCantidadDeGolesEnContraEnLaFecha(1, i);
			
		}
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unVolante.obtenerPuntajeTotalDeLaFecha(i) == -3);
			
		}
		
	}
	
	//*************************************************************************

	@Test
	public void testSiUnDelanteroHaceUnGolDeJugadaAfavorDeberiaSumar3PuntosExtra() throws ExcepcionNumeroDeFechaImposible{
		
		Delantero unDelantero = new Delantero("Claudio Riaño", 5000000);
		
		for(int i = 1; i < 20; i++){
			
			unDelantero.hizoCantidadDeGolesDeJugadaAfavorEnLaFecha(1, i);
			
		}
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unDelantero.obtenerPuntajeTotalDeLaFecha(i) == 3);
			
		}
		
	}
	
	//*************************************************************************
	
	@Test
	public void testSiUnVolanteHaceUnGolDeJugadaAfavorDeberiaSumar4PuntosExtra() throws ExcepcionNumeroDeFechaImposible{
		
		Volante unVolante = new Volante("Maxi Rodriguez", 1000000);
		
		for(int i = 1; i < 20; i++){
			
			unVolante.hizoCantidadDeGolesDeJugadaAfavorEnLaFecha(1, i);
			
		}
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unVolante.obtenerPuntajeTotalDeLaFecha(i) == 4);
			
		}
		
	}
	
	//*************************************************************************

	@Test
	public void testSiUnDelanteroHaceUnGolDePenalDeberiaSumar2PuntosExtra() throws ExcepcionNumeroDeFechaImposible{
		
		Delantero unDelantero = new Delantero("Claudio Riaño", 5000000);
		
		for(int i = 1; i < 20; i++){
			
			unDelantero.hizoCantidadDeGolesDePenalEnLaFecha(1, i);
			
		}
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unDelantero.obtenerPuntajeTotalDeLaFecha(i) == 2);
			
		}
		
	}
	
	//*************************************************************************
	
	@Test
	public void testSiUnVolanteHaceUnGolDePealDeberiaSumar2PuntosExtra() throws ExcepcionNumeroDeFechaImposible{
		
		Volante unVolante = new Volante("Maxi Rodriguez", 1000000);
		
		for(int i = 1; i < 20; i++){
			
			unVolante.hizoCantidadDeGolesDePenalEnLaFecha(1, i);
			
		}
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unVolante.obtenerPuntajeTotalDeLaFecha(i) == 2);
			
		}
		
	}
	
	//*************************************************************************

	@Test
	public void testSiUnDelanteroEstaAmonestadoDeberiaRestar1PuntoExtraPorFecha() throws ExcepcionCantidadDeTarjetasAmarillasIncorrecta, ExcepcionNumeroDeFechaImposible{
		
		Delantero unDelantero = new Delantero("Claudio Riaño", 5000000);
		
		for(int i = 1; i < 20; i++){
			
			unDelantero.obtuvoCantidadDeTarjetasAmarillasEnLaFecha(1, i);
			
		}
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unDelantero.obtenerPuntajeTotalDeLaFecha(i) == -1);
			
		}
		
	}
	
	//************************************************************************
	
	@Test
	public void testSiUnVolanteEstaAmonestadoDeberiaRestar1PuntoExtraPorFecha() throws ExcepcionCantidadDeTarjetasAmarillasIncorrecta, ExcepcionNumeroDeFechaImposible{
		
		Volante unVolante = new Volante("Cristian Erbes", 5000000);
		
		for(int i = 1; i < 20; i++){
			
			unVolante.obtuvoCantidadDeTarjetasAmarillasEnLaFecha(1, i);
			
		}
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unVolante.obtenerPuntajeTotalDeLaFecha(i) == -1);
			
		}
		
	}
	
	//************************************************************************
	
	@Test
	public void testSiUnDelanteroFueExpulsadoDeberiaRestar2PuntosPorFecha() throws ExcepcionNumeroDeFechaImposible{
		
		Delantero unDelantero = new Delantero("Claudio Riaño", 5000000);
		
		for(int i = 1; i < 20; i++){
			
			unDelantero.salioExpulsadoEnLaFecha(i);
			
		}
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unDelantero.obtenerPuntajeTotalDeLaFecha(i) == -2);
			
		}
		
	}

	//************************************************************************
	
	@Test
	public void testSiUnVolanteFueExpulsadoDeberiaRestar2PuntosPorFecha() throws ExcepcionNumeroDeFechaImposible{
		
		Volante unVolante = new Volante("Fernando Gago", 5000000);
		
		for(int i = 1; i < 20; i++){
			
			unVolante.salioExpulsadoEnLaFecha(i);
			
		}
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unVolante.obtenerPuntajeTotalDeLaFecha(i) == -2);
			
		}
		
	}
	
	//************************************************************************
	
	@Test
	public void testSiUnDelanteroSaleFiguraEnUnaFechaDeberiaSumar2PuntosExtra() throws ExcepcionNumeroDeFechaImposible{
		
		Delantero unDelantero = new Delantero("Claudio Riaño", 5000000);
		
		for(int i = 1; i < 20; i++){
			
			unDelantero.salioFiguraEnLaFecha(i);
			
		}
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unDelantero.obtenerPuntajeTotalDeLaFecha(i) == 2);
			
		}
		
	}
	
	//************************************************************************
	
	@Test
	public void testSiUnVolanteSaleFiguraEnUnaFechaDeberiaSumar2PuntosExtra() throws ExcepcionNumeroDeFechaImposible{
		
		Volante unVolante = new Volante("Cristian Erbes", 5000000);
		
		for(int i = 1; i < 20; i++){
			
			unVolante.salioFiguraEnLaFecha(i);
			
		}
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unVolante.obtenerPuntajeTotalDeLaFecha(i) == 2);
			
		}
		
	}
	
	//************************************************************************
	
	@Test
	public void testSiUnDelanteroSaleChenemigoEnUnaFechaDeberiaRestar2PuntosExtra() throws ExcepcionNumeroDeFechaImposible{
		
		Delantero unDelantero = new Delantero("Claudio Riaño", 5000000);
		
		for(int i = 1; i < 20; i++){
			
			unDelantero.salioChenemigoEnLaFecha(i);
			
		}
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unDelantero.obtenerPuntajeTotalDeLaFecha(i) == -2);
			
		}
		
	}
	
	//************************************************************************
	
	@Test
	public void testSiUnVolanteSaleChenemigoEnUnaFechaDeberiaRestar2PuntosExtra() throws ExcepcionNumeroDeFechaImposible{
		
		Volante unVolante = new Volante("Cristian Erbes", 5000000);
		
		for(int i = 1; i < 20; i++){
			
			unVolante.salioChenemigoEnLaFecha(i);
			
		}
		
		for(int i = 1; i < 20; i++){
			
			assertTrue(unVolante.obtenerPuntajeTotalDeLaFecha(i) == -2);
			
		}
		
	}
	
	//************************************************************************
	
}
